#ifndef __PH_M01_DIS_H__
#define __PH_M01_DIS_H__

#include "cbb_ph_obj.h"

// 功能码
typedef enum M01_Dis_Func{
    M01_DIS_SET_OFFSET = 0x12,         // 设置偏移量
    M01_DIS_READ_ONCE = 0x20,          // 一次读取
    M01_DIS_READ_CONTINUOUS = 0x21,    // 连续读取
}M01_Dis_Func_t;

// M01 测距协议数据结构
typedef struct M01_Dis_Data{
    uint16_t u16Func;   // 功能码
    uint8_t u8Addr;     // 设备地址
    uint32_t u32Data;   // 数据值
}M01_Dis_Data_t;

// M01 测距协议对象
typedef struct PH_M01_Dis{
    M01_Dis_Data_t stData;        // m01 数据备份
}PH_M01_Dis_t;

PH_REG_DEC(cbb_m01_dis, PH_M01_Dis_t)

/**
 * @brief 设置 M01 数据
 * @param pstSelf 协议上下文特征对象
 * @param pstData M01 数据
 */
PH_RET_t
cbb_m01_dis_set_data(PH_t* pstSelf, M01_Dis_Data_t* pstData);

/**
 * @brief 获取 M01 数据
 * @param pstSelf 协议上下文特征对象
 * @param pstData M01 数据
 */
PH_RET_t
cbb_m01_dis_get_data(PH_t* pstSelf, M01_Dis_Data_t* pstData);

/**
 * @brief 构建 M01 构建报文
 * @param pstPHObj 协议对象
 * @param pstTxBuffer 发送缓存
 * @return @see PH_RET_t
 */
PH_RET_t 
cbb_m01_dis_build(PH_t* pstSelf, PH_Buf_t* pstTxBuffer);

/**
 * @brief 解析 M01 解析报文
 * @param pstPHObj 协议对象
 * @param pstRxBuffer 接收缓存
 * @return @see PH_RET_t
 */
PH_RET_t 
cbb_m01_dis_parse(PH_t* pstSelf, PH_Buf_t* pstRxBuffer);

#endif /* __PH_M01_DIS_H__ */
